package com.qtrue.string;

import org.junit.Test;

/**
 * @Package: com.qtrue.string
 * @ClassName: StringBufferAndStringBuilderMethod
 * @Author: xiaoBao
 * @CreateTime: 2022-05-26 19:58
 * @Description:StringBuffer和StirngBuilder的常用方法（这两个类的方法名都相同：通用）
 *
 * StringBuffer和StringBuilder的常用方法：
 *  StringBuffer append("xxx")：用于进行字符串拼接（有很多的append()方法）
 *  StringBuffer delete(int start,int end)：删除指定位置的内容
 *  StringBuffer replace(int start, int end, String str):把[start,end)位置替换为"xxx"
 *  StringBuffer insert(int offset,"xxx"):在指定位置插入"xxx"
 *  StringBuffer reverse():把当前字符序列逆转
 *  int indexof(String str)：获取到当前str在字符串中第一个出现的下标位置
 *  String substring (int start,int end)：返回一个从start开始到end区间的“子字符串”
 *  int length()：返回当前字符串的长度
 *  char charAt(int n)：返回指定位置的字符
 *  void setCharAt(int n ,char ch)：将指定位置的字符改为自定义的字符
 *
 *  注：String、StringBuffer、StringBuilder类方法的下标位置涉及到开始、结束时，都遵循“左闭右开”的原则。
 *  总结：
 *      增：append("xxx");
 *      删：delete(int start, int end);
 *      改：setCharAt(int n); / replace(int start, int end, String str);
 *      查：charAt(int n);
 *      插：insert(int offset, "xxx");
 *      长度：length();
 *      遍历：for(){} + charAt(); / toString();  通常使用后者直接看
 *
 *  对比String、StringBuffer、StringBuilder三者的效率：
 *      StringBuilder > StringBuffer > String
 */
public class StringBufferAndStringBuilderMethod {

    @Test
    public void MethodTest(){
        // append("xxx")：用于进行字符串拼接（有很多的append()方法）
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.append(1); // 输入int型的数据，但存入后是String类型的1。
        sb1.append("1");
        System.out.println(sb1); // abc11

        System.out.println("*******************");

        // delete(int start,int end)：删除指定位置的内容
        sb1.delete(2,4);
        System.out.println(sb1); // ab1

        System.out.println("*******************");

        // replace(int start, int end, String str):把[start,end)位置替换为"xxx"
        sb1.replace(2,3,"cd");
        System.out.println(sb1); // abcd

        System.out.println("*******************");

        // insert(int offset,"xxx"):在指定位置插入"xxx"
        sb1.insert(4,false); // 这里也可以插入"字符串"
        System.out.println(sb1); // abcdfalse
        System.out.println(sb1.length()); // 9

        System.out.println("*******************");

        // reverse():把当前字符序列逆转
//        sb1.reverse();
//        System.out.println(sb1); // eslafdcba

        System.out.println("*******************");

        // String substring (int start,int end)：返回一个从start开始到end区间的“子字符串”
        String s1 = sb1.substring(0, 4);
        System.out.println(s1); // abcd
    }
}
